{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Download Any OSM Geospatial Features with OSMnx\n",
    "\n",
    "Author: [Geoff Boeing](https://geoffboeing.com/)\n",
    "\n",
    "More info:\n",
    "\n",
    "  - [Documentation](https://osmnx.readthedocs.io/)\n",
    "  - [Journal article and citation info](https://geoffboeing.com/publications/osmnx-paper/)\n",
    "  - [Code repository](https://github.com/gboeing/osmnx)\n",
    "  - [Examples gallery](https://github.com/gboeing/osmnx-examples)\n",
    "  \n",
    "This notebook provides a quick tour of using OSMnx to download any geospatial features from OpenStreetMap as a geopandas GeoDataFrame."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:09:35.496604700Z",
     "start_time": "2025-03-08T08:09:31.488324400Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "'2.0.1'"
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import osmnx as ox\n",
    "import pandas as pd\n",
    "\n",
    "ox.__version__"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use the `geometries` module to download features, such as grocery stores, transit stops, points of interest, or building footprints, and turn them into a GeoDataFrame: [see docs](https://osmnx.readthedocs.io/en/stable/osmnx.html#module-osmnx.geometries).\n",
    "\n",
    "To query, pass a `tags` dict where keys are OSM tags. The dict's values can be either:\n",
    "  1. `True` to retrieve all OSM objects with this tag, regardless of its value\n",
    "  2. a single value as a string to retrieve all OSM objects with this tag:value combination\n",
    "  3. a list of string values to retrieve all OSM objects where this tag matches any of these values\n",
    "\n",
    "Pass multiple dict key:value pairs to retrieve the union (not intersection) of these pairs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:09:43.148142200Z",
     "start_time": "2025-03-08T08:09:35.496604700Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "(568, 105)"
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# get all building footprints in some neighborhood\n",
    "# `True` means retrieve any object with this tag, regardless of value\n",
    "place = \"Chinatown, San Francisco, California\"\n",
    "tags = {\"building\": True}\n",
    "gdf = ox.features.features_from_place(place, tags)\n",
    "gdf.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:09:43.437165100Z",
     "start_time": "2025-03-08T08:09:43.144145400Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 300x300 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = ox.plot.plot_footprints(gdf, figsize=(3, 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:09:46.720398400Z",
     "start_time": "2025-03-08T08:09:43.390163800Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "(2, 17)"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# get all the parks in some neighborhood\n",
    "# constrain acceptable `leisure` tag values to `park`\n",
    "tags = {\"leisure\": \"park\"}\n",
    "gdf = ox.features.features_from_place(place, tags)\n",
    "gdf.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:10:03.624599200Z",
     "start_time": "2025-03-08T08:09:46.723397900Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "(161, 69)"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# get everything tagged amenity,\n",
    "# and everything tagged landuse = retail or commercial,\n",
    "# and everything tagged highway = bus_stop\n",
    "tags = {\"amenity\": True, \"landuse\": [\"retail\", \"commercial\"], \"highway\": \"bus_stop\"}\n",
    "gdf = ox.features.features_from_place(\"Piedmont, California, USA\", tags)\n",
    "gdf.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:10:03.625597400Z",
     "start_time": "2025-03-08T08:10:03.583587500Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "                                                             geometry amenity  \\\nelement id                                                                      \nnode    2810181540                        POINT (-122.23256 37.82515)    bank   \nway     276424028   POLYGON ((-122.23259 37.82492, -122.23252 37.8...    bank   \n        285549437   POLYGON ((-122.23148 37.82467, -122.23133 37.8...    bank   \n\n                               name            brand brand:wikidata  \nelement id                                                           \nnode    2810181540         Citibank         Citibank        Q857063  \nway     276424028   Bank of America  Bank of America        Q487907  \n        285549437       Wells Fargo      Wells Fargo        Q744149  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th></th>\n      <th>geometry</th>\n      <th>amenity</th>\n      <th>name</th>\n      <th>brand</th>\n      <th>brand:wikidata</th>\n    </tr>\n    <tr>\n      <th>element</th>\n      <th>id</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>node</th>\n      <th>2810181540</th>\n      <td>POINT (-122.23256 37.82515)</td>\n      <td>bank</td>\n      <td>Citibank</td>\n      <td>Citibank</td>\n      <td>Q857063</td>\n    </tr>\n    <tr>\n      <th rowspan=\"2\" valign=\"top\">way</th>\n      <th>276424028</th>\n      <td>POLYGON ((-122.23259 37.82492, -122.23252 37.8...</td>\n      <td>bank</td>\n      <td>Bank of America</td>\n      <td>Bank of America</td>\n      <td>Q487907</td>\n    </tr>\n    <tr>\n      <th>285549437</th>\n      <td>POLYGON ((-122.23148 37.82467, -122.23133 37.8...</td>\n      <td>bank</td>\n      <td>Wells Fargo</td>\n      <td>Wells Fargo</td>\n      <td>Q744149</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view just the banks\n",
    "gdf[gdf[\"amenity\"] == \"bank\"].dropna(axis=1, how=\"any\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:10:03.636598Z",
     "start_time": "2025-03-08T08:10:03.604590Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "                                       geometry  \\\nelement id                                        \nnode    4071030440  POINT (-122.21517 37.81248)   \n        5845148873  POINT (-122.21492 37.81822)   \n        5845152990  POINT (-122.21459 37.81818)   \n        5845153014  POINT (-122.22303 37.81763)   \n        5845153034  POINT (-122.22265 37.81779)   \n\n                                                  name  bus   highway  \\\nelement id                                                              \nnode    4071030440  Park Boulevard & Saint James Drive  yes  bus_stop   \n        5845148873     Hampton Road & Sandringham Road  yes  bus_stop   \n        5845152990     Hampton Road & Sandringham Road  yes  bus_stop   \n        5845153014       Hampton Road & Seaview Avenue  yes  bus_stop   \n        5845153034       Hampton Road & Seaview Avenue  yes  bus_stop   \n\n                       network public_transport    ref route_ref  \nelement id                                                        \nnode    4071030440  AC Transit         platform  57544  V;33;688  \n        5845148873  AC Transit         platform  53832        33  \n        5845152990  AC Transit         platform  50830        33  \n        5845153014  AC Transit         platform  53865        33  \n        5845153034  AC Transit         platform  53238        33  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th></th>\n      <th>geometry</th>\n      <th>name</th>\n      <th>bus</th>\n      <th>highway</th>\n      <th>network</th>\n      <th>public_transport</th>\n      <th>ref</th>\n      <th>route_ref</th>\n    </tr>\n    <tr>\n      <th>element</th>\n      <th>id</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th rowspan=\"5\" valign=\"top\">node</th>\n      <th>4071030440</th>\n      <td>POINT (-122.21517 37.81248)</td>\n      <td>Park Boulevard &amp; Saint James Drive</td>\n      <td>yes</td>\n      <td>bus_stop</td>\n      <td>AC Transit</td>\n      <td>platform</td>\n      <td>57544</td>\n      <td>V;33;688</td>\n    </tr>\n    <tr>\n      <th>5845148873</th>\n      <td>POINT (-122.21492 37.81822)</td>\n      <td>Hampton Road &amp; Sandringham Road</td>\n      <td>yes</td>\n      <td>bus_stop</td>\n      <td>AC Transit</td>\n      <td>platform</td>\n      <td>53832</td>\n      <td>33</td>\n    </tr>\n    <tr>\n      <th>5845152990</th>\n      <td>POINT (-122.21459 37.81818)</td>\n      <td>Hampton Road &amp; Sandringham Road</td>\n      <td>yes</td>\n      <td>bus_stop</td>\n      <td>AC Transit</td>\n      <td>platform</td>\n      <td>50830</td>\n      <td>33</td>\n    </tr>\n    <tr>\n      <th>5845153014</th>\n      <td>POINT (-122.22303 37.81763)</td>\n      <td>Hampton Road &amp; Seaview Avenue</td>\n      <td>yes</td>\n      <td>bus_stop</td>\n      <td>AC Transit</td>\n      <td>platform</td>\n      <td>53865</td>\n      <td>33</td>\n    </tr>\n    <tr>\n      <th>5845153034</th>\n      <td>POINT (-122.22265 37.81779)</td>\n      <td>Hampton Road &amp; Seaview Avenue</td>\n      <td>yes</td>\n      <td>bus_stop</td>\n      <td>AC Transit</td>\n      <td>platform</td>\n      <td>53238</td>\n      <td>33</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view just the bus stops\n",
    "gdf[gdf[\"highway\"] == \"bus_stop\"].dropna(axis=1, how=\"any\").head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Attach features to nearest nodes\n",
    "\n",
    "For example, attach parking information to nearest network nodes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:10:20.639802300Z",
     "start_time": "2025-03-08T08:10:03.622597100Z"
    }
   },
   "outputs": [],
   "source": [
    "# first create the graph and the features\n",
    "place = \"Piedmont, CA, USA\"\n",
    "G = ox.graph.graph_from_place(place, network_type=\"drive\")\n",
    "features = ox.features.features_from_place(place, {\"amenity\": \"parking\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:10:20.656791100Z",
     "start_time": "2025-03-08T08:10:20.642790200Z"
    }
   },
   "outputs": [],
   "source": [
    "# then attach your features to your graph's nearest nodes as attributes\n",
    "feature_points = features.representative_point()\n",
    "nn = ox.distance.nearest_nodes(G, feature_points.x, feature_points.y)\n",
    "useful_tags = [\"access\", \"parking\", \"surface\", \"capacity\", \"fee\"]\n",
    "for node, feature in zip(nn, features[useful_tags].to_dict(orient=\"records\")):\n",
    "    feature = {k: v for k, v in feature.items() if pd.notna(v)}\n",
    "    G.nodes[node].update({\"parking\": feature})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-08T08:10:20.660791400Z",
     "start_time": "2025-03-08T08:10:20.658790600Z"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
